home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
mail
/
mh
/
contrib
/
jpeek
/
search
< prev
next >
Wrap
Text File
|
1992-08-08
|
3KB
|
95 lines
#! /bin/sh
# $Header: /home/jerry/.bin/RCS/search,v 1.5 92/08/09 23:26:35 jerry mh_contrib $
### search - search for mail containing some regular expression(s)
### Usage: search { 'regexp' -a 'regexp' ... } [+folder] [messages]
##
## search MAKES THE pick -search COMMAND LINE EASIER TO TYPE.
## search REPLACES "{" WITH "-lbrace" and "}" WITH "-rbrace".
## IF YOU USE -a AND -o, IT PASSES THEM ON TO pick.
## BUG: YOU NEED TO PUT SPACE AROUND { AND } SO THIS SCRIPT CAN SEE THEM.
## OTHER ARGUMENTS BETWEEN { AND } HAVE -search ADDED BEFORE THEM.
## FOR MORE INFO, TYPE man pick.
##
## IF THE REGULAR EXPRESSION DOESN'T HAVE BAD CHARACTERS, YOU DON'T
## NEED TO QUOTE IT. HERE'S A SIMPLE SEARCH -- FINDING MESSAGES
## THAT CONTAIN THE WORD fred IN UPPER OR LOWER CASE:
## % search { fred }
## 465 10/04 Joe Mertz MH questions<<Why would Fred want
## 1658+ 11/30 To:fred New 'mhlinks' program replaces
##
## FOR EXAMPLE, IF YOU TYPE THIS COMMAND:
## % search { 'fred.*ed' -a 'mary.*may' }
## IT WILL ACTUALLY RUN THIS FOR YOU:
## pick -lbrace -search 'fred.*ed' -and -search 'mary.*may' -rbrace
## BUT THIS COMMAND IS A SYNTAX ERROR BECAUSE THERE AREN'T ANY BRACES:
## % search 'fred.*ed' +foo
## pick: bad message list fred.*ed
## YOU CAN ALSO USE -o FOR "-or". OTHER SWITCHES ARE PASSED TO pick.
##
## AFTER search RUNS pick, IT RUNS scan picked.
##
## BUG: IT'S ALMOST IMPOSSIBLE TO SEARCH FOR A DOUBLEQUOTE (").
## USE PLAIN pick -search TO DO THAT.
# NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE.
#
# USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
# PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
expr=/bin/expr # I WISH THIS WAS BUILT-IN...
mh=/usr/local/mh # WHERE MH COMMANDS LIVE
myname="`basename $0`"
# REMEMBER HOW MANY LEFT BRACES WE'VE SEEN WITHOUT MATCHING RIGHTS.
# 0 MEANS NO NESTED BRACES... 1 MEANS 1 UNMATCHED, ETC:
nesting=0
# THIS IS THE COMMAND LINE FOR pick THAT WE'LL eval AT END OF SCRIPT:
pickline=
# PARSE COMMAND LINE:
for arg
do
case "$arg" in
\{) nesting="`$expr $nesting + 1`"
pickline="$pickline -lbrace"
;;
\}) nesting="`$expr $nesting - 1`"
pickline="$pickline -rbrace"
;;
\{*|\}*)
# WE COULD FIX THIS WITH expr:
echo 1>&2 "$myname: Sorry; $arg needs space between text and brace."
exit 1
;;
[+@]*)
case "$nesting" in
0) folder="$arg" ;;
*) pickline="$pickline -search \"$arg\"" ;;
esac
;;
-a*) pickline="$pickline -and" ;;
-o*) pickline="$pickline -or" ;;
-*) pickline="$pickline $arg" ;;
*) case "$nesting" in
0) pickline="$pickline $arg" ;;
*) pickline="$pickline -search \"$arg\"" ;;
esac
;;
esac
shift
done
case "$nesting" in
0) if eval $mh/pick $folder $pickline -sequence picked
then
$mh/scan picked
exit
else
exit # WITH STATUS FROM pick (MUST DO WITH else NOT AFTER fi)
fi
;;
*) echo 1>&2 "$myname: unmatched brace."
exit 1
;;
esac